<?php
/*
 * Representa��o do setor de um Campus.
 * Todos os servidores cadastros no sistema necessariamente est�o vinculados a um setor, e este por sua vez est� vinculado a um Campus.
 */

//if( !function_exists('__autoload') )
//{
  //  function __autoload($class_name) {
   // require_once $class_name . '.php';
    //}
//}

require_once 'setorDAO.php';
class Setor
{
    private $id;            // Chave-Prim�ria do setor cadastrado no banco de dados
    private $nome;          // Nome do setor
    private $responsavel;   // Nome do respons�vel pelo setor
    private $campus;       	// Objeto do tipo 'Campus' referente ao campus ao qual o setor est� vinculado.
    private $dao;           // Interface DAO para Setor

    public function __construct($id = NULL, $nome = NULL, $responsavel = NULL, $campus = NULL)
    {
             $this->id = $id;
             $this->nome = $nome;
             $this->responsavel = $responsavel;
             $this->campus = $campus;
             $this->dao = new SetorDAO();
    }

    public function __set( $var, $val )
    {
           $this->$var = $val;
    }

    public function __get( $var )
    {
    	
           return $this->$var;
    }
    
	/**
	 * Insere um registro no banco de dados na tabela t_setor com os dados do objeto.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.	 
    */
	public function CadastrarSetor()
	{
		$resultado = $this->dao->CadastrarSetor( $this );
		return $resultado;
	}

	/**
	 * Altera o registro no banco de dados na tabela t_setor associado ao objeto.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio. 
	*/
	public function AlterarSetor()
	{
		$resultado = $this->dao->AlterarSetor( $this );
		return $resultado;
    }

	/**
	 * Exclui um registro no banco de dados da tabela t_setor.
	 * @param $setorId - Chave-prim�ria no banco de dados do setor.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio. 
	*/
	public function RemoverSetor( $setorId )
	{
		$resultado = $this->dao->Delete( $setorId );
		return $resultado;
	}

	/**
	 * Carrega da tabela t_setor no banco de dados o registro referente a chave-prim�ria $setorId.
	 * Transforma o registro retornado do banco de dados em um objeto Setor com essas informa��es.
	 * @param $setorId - Chave-prim�ria no banco de dados do setor.
	 * @return - Retorna um objeto do tipo Setor caso a opera��o seja efetuada com sucesso, caso contr�rio retorna FALSE.
	 */
	public function CarregarSetor( $setorId )
	{
		$resultado = $this->dao->CarregarSetor( $setorId );
		return $resultado;
	}
	
	/**
	 * Carrega todos os registros da tabela t_setor. 
	 * Os registros retornados do banco de dados ser�o transformados em objetos do tipo Setor e colocados em um array.
	 * @return - Retorna um array de objetos do tipo Setor caso a opera��o seja efetuada com sucesso, caso contr�rio retorna FALSE.
    */
	public function CarregarSetores()
	{
		$resultado = $this->dao->CarregarSetores();
		return $resultado;
	}

	/**
	 * Carrega todos os registros da tabela t_setor associados ao campus de chave-prim�ria $campusId
	 * @param $campusId - Chave-prim�ria no banco de dados do campus pelo qual pretende-se fazer a busca.
	 * @return - Retorna um array de objetos do tipo Setor caso a opera��o seja efetuada com sucesso, caso contr�rio retorna FALSE.  
	*/
	public function CarregarSetoresPorCampus( $campusId )
	{
		$resultado = $this->dao->CarregarSetoresPorCampus( $campusId );
		return $resultado;
	}
      
      /**
      Busca pelo nome do setor associado ao usu�rio que fez o processo de compra.
      Como um processo de compra possui uma chave-estrangeira do usu�rio que fez o processo e a tabela t_usuario possui uma chave-estrangeira do setor ao qual o usu�rio est� vinculado, � poss�vel obter informa��es do setor que requisitou a compra atrav�s de Joins.
      Este m�todo ir� retornar o nome do setor que fez um determinado pedido de compra.
      @usuarioId - chave-prim�ria do usu�rio que fez a compra
      @return - Retorna uma string com o nome do setor. Caso n�o encontre nenhum resultado, retorna FALSE.
      */
      /*public function CarregarSetorPorProcesso( $usuarioId )
      {
             $resultado = $this->dao->LoadSectorPerProcess( $usuarioId );
             return $resultado;
      }*/
      
	/**
	 * Transforma o array com os registros retornados da tabela t_setor em objetos do tipo Setor.
	 * @param $array - Array com os registros retornados de uma consulta a tabela t_setor.
	 * @return Retorna um array de objetos do tipo Setor ou FALSE caso o argumento informado n�o seja do tipo requerido.
	 */
	public static function ArrayParaObjetos( $array )
	{
		if( !is_array( $array ) )
			return FALSE;
		
		$objetos = array();
		for($i = 0; $i < count($array); $i++ )
		{
			$c = new Campus( );
            $campus = $c->CarregarCampus( $array[$i]['t_campus_id'] );
            
			$s = new Setor( $array[$i]['id'],
							$array[$i]['nome'],
							$array[$i]['responsavel'],
							$campus );
			$objetos[] = $s;
		}
		return $objetos;
	}
}
?>
